package com.mirror.llk.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;

import org.apache.commons.lang.StringUtils;

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

/**
 * @Title: 公用工具类
 * @Copyright: Copyright (c) 2012-7-30
 * @Company: 幻方朗睿
 * @Author: Andy.D
 * @Version: 1.0
 */
public class CommonUtils {

    /**
     * 根据Properties文件名，读取内容
     * 
     * @param name
     *            Properties文件名（不含路径）
     * @return HashMap<String, String> Properties文件内容
     */
    public static HashMap<String, String> getPropertiesConfig(String name) throws Exception {
        if (!StringUtils.isEmpty(name)) {
            // 文件名(包括路径)
            String filename = name + ".properties";
            InputStream is = CommonUtils.class.getClassLoader().getResourceAsStream(filename);
            MyPropertiesConfig my = new MyPropertiesConfig();
            HashMap<String, String> map = my.loadValues(is);
            is.close();
            return map;
        }
        return null;
    }

    /**
     * 保存图片并返回地址
     * 
     * @param fileStr
     *            BASE64位文件字符串
     * @param rootPath
     *            根路径
     * @param relativePath
     *            相对路径
     * @param fileName
     *            文件名
     * @return 相对路径/文件名
     * @throws IOException
     *             输入输出流异常
     */
    public static String generateFile(String fileStr, String rootPath, String relativePath, String fileName) throws IOException {
        // 对字节数组字符串进行Base64解码并生成文件
        if (StringUtils.isEmpty(fileStr)) {
            return null;
        }
        // Base64解码
        BASE64Decoder decoder = new BASE64Decoder();
        byte[] b = decoder.decodeBuffer(fileStr);
        for (int i = 0; i < b.length; ++i) {
            if (b[i] < 0) {
                // 调整异常数据
                b[i] += 256;
            }
        }
        // 生成文件
        OutputStream out = new FileOutputStream(new File(rootPath + relativePath + fileName));
        out.write(b);
        out.flush();
        out.close();
        return relativePath + fileName;
    }

    /**
     * 创建文件目录
     * 
     * @param dirPath
     *            路径
     * @return 文件目录
     */
    public static File mkDir(String dirPath) {
        File file = new File(dirPath);
        if (!file.exists()) {
            file.mkdirs();
        }
        return file;
    }

    /**
     * 取图片，返回图片字符流
     * 
     * @param photoLoaction
     *            用户的图片地址
     * @return String 用户图片字符流
     * @throws Exception
     */
    public static String GetImageStr(String baseName, String storePath) throws Exception {// 将图片文件转化为字节数组字符串，并对其进行Base64编码处理
        InputStream in = null;
        byte[] data = null;
        // 读取图片字节数组
        in = new FileInputStream(new File(baseName + storePath));
        data = new byte[in.available()];
        in.read(data);
        in.close();
        // 对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(data);// 返回Base64编码过的字节数组字符串
    }

    /**
     * 取图片，返回图片字符流
     * 
     * @param photoLoaction
     *            用户的图片地址
     * @return String 用户图片字符流
     * @throws Exception
     */
    public static String GetImageStr(File file) throws Exception {// 将图片文件转化为字节数组字符串，并对其进行Base64编码处理
        InputStream in = null;
        byte[] data = null;
        // 读取图片字节数组
        in = new FileInputStream(file);
        data = new byte[in.available()];
        in.read(data);
        in.close();
        // 对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        return encoder.encode(data);// 返回Base64编码过的字节数组字符串
    }

}